﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using wsUsuarioSOAP.Dominio;
using wsUsuarioSOAP.Persistencia;
using NHibernate;
using NHibernate.Criterion;
using System.ServiceModel.Channels;

namespace wsUsuarioSOAP
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Usuarios" en el código, en svc y en el archivo de configuración a la vez.
    public class Usuarios : IUsuarios
    {
        private UsuarioDAO dao = new UsuarioDAO();

        public Usuario CrearUsuarios(int id_, string dni_, string nombre_, string email_, string password_, string mensaje_, int idRol_)
        {
            bool swExiste = dao.ValidarExistencia(nombre_, dni_);

            if (swExiste)
            {
                throw new FaultException<ValidationException>(new ValidationException { ValidationError = "SOAPUsuario: Error, El nombre de Usuario y/o DNI ya se encuentra registrado." },
                new FaultReason("Validation Failed"));
            }
            else
            {
                Usuario usuarioACrear = new Usuario();
                usuarioACrear.id = id_;
                usuarioACrear.dni = dni_;
                usuarioACrear.nombre = nombre_;
                usuarioACrear.email = email_;
                usuarioACrear.password = password_;
                usuarioACrear.mensaje = mensaje_;
                usuarioACrear.idRol = idRol_;

                return dao.Crear(usuarioACrear);
            }
        }

        public Usuario ObtenerUsuario(int id)
        {
            Usuario user = new Usuario();
            user = dao.Obtener(id);

            if (user == null)
            {
                throw new FaultException<ValidationException>(new ValidationException { ValidationError = "SOAPUsuario : Error, Usuario no existente." },
                new FaultReason("Validation Failed"));
            }
            return user;
        }

        public Usuario ValidarUsuario(string usuario, string password)
        {
            Usuario user = new Usuario();
            user = dao.ValidarUsuario(usuario, password);

            if (user == null)
            {
                throw new FaultException<ValidationException>(new ValidationException { ValidationError = "SOAPUsuario : El Usuario y/o el password ingresado no se valido." },
                new FaultReason("Validation Failed"));
            }

            return user;
        }

        public Usuario ModificarUsuario(int id, string dni, string email, string mensaje, string nombre_, string password_, int idRol_)
        {
            Usuario existe = null;
            existe = dao.Obtener(id);

            if (existe != null)
            {
                Usuario usuarioAModificar = new Usuario()
                {
                    id = id,
                    dni = dni,
                    email = email,
                    mensaje = mensaje,
                    nombre = nombre_,
                    password = password_,
                    idRol = idRol_
                };

                return dao.Actualizar(usuarioAModificar);

            }
            else
            {
                throw new FaultException<ValidationException>(new ValidationException { ValidationError = "SOAPUsuario : Error, el Usuario no existente." },
                new FaultReason("Validation Failed"));
            }

        }

        public void EliminarUsuario(int id)
        {
            dao.Eliminar(id);
        }

        public List<Usuario> ListarUsuario()
        {
            return dao.ListarUsuarios();
        }


    }
}